package com.h3c.ptability.controller;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.h3c.ptability.entity.PtEnum;
import com.h3c.ptability.service.IPtEnumService;
import com.h3c.ptability.support.ResultData;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.nio.charset.StandardCharsets;

/**
 * @author chenyifan
 * @date 2022/6/9 11:12
 * 导入枚举文件接口
 */
@Slf4j
@CrossOrigin
@RestController
@AllArgsConstructor
@RequestMapping("/importEnumFile")
public class ImportEnumFileController {


    private final IPtEnumService ptEnumService;

    /**
     * 导入文件生成枚举
     *
     * @param file     文件
     * @param enumCode 枚举编码
     * @param appId    应用名称
     * @param enumName 枚举名称
     * @return 返回
     */
    @PostMapping("/parseEnum")
    public ResultData<String> parseEnum(@RequestParam("file") MultipartFile file,
                                        @RequestParam("enumCode") String enumCode,
                                        @RequestParam("appId") String appId,
                                        @RequestParam("enumName") String enumName) {
        try {
            File tempFile = FileUtil.writeBytes(file.getBytes(), this.getClass().getResource("/").toString() + "/temp/" + IdUtil.randomUUID() + ".text");
            String content = FileUtil.readString(tempFile, StandardCharsets.UTF_8);
            JSONArray jsonArray = JSONUtil.parseArray(content);
            PtEnum ptEnum = new PtEnum();
            ptEnum.setAppId(appId);
            ptEnum.setEnumCode(enumCode);
            ptEnum.setEnumName(enumName);
            jsonArray.jsonIter().forEach(s -> {
                ptEnum.setValue(s.getStr("key"));
                ptEnum.setNameZh(s.getStr("value"));
                ptEnumService.save(ptEnum);
            });
            FileUtil.del(tempFile);
            return ResultData.success("导入文件生成枚举成功");
        } catch (Exception e) {
            return ResultData.fail("导入文件生成枚举失败:{}", e.getMessage());
        }
    }
}
